package com.ftg.learn.chapter13;

import lombok.SneakyThrows;

/**
 * 第二种方法
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/2/9 下午2:04
 */
public class BRunnable implements Runnable {

    //变量 voliate synchronized
    public static int index = 100;
    public int a = 9;
    public int b = 9;
    public int c = 9;

    private int num;

    public BRunnable(int num) {
        this.num = num;
    }

    @SneakyThrows
    @Override
    public void run() {
        for (int i = 0; i < num; i++) {
            System.out.println(i);
            //阻塞状态 自动回到就绪状态
//            Thread.sleep(1000);
            //时间轴的问题
//            System.out.println("代码区里面做的index -- 操作现在值为:" + Thread.currentThread().getName() + index);
//            System.out.println("hello,线程默认名称为:" + Thread.currentThread().getName());
        }
    }

    public static void main(String[] args) {
        //对同一个类的实例产生的多个线程，他们执行时，是异步的 不是同步的

        //cpu
        //线程1 执行start()以后线程启动了
        // new Brunnable(1)的时候要申请 cpu资源 等待cpu调度
        new Thread(new BRunnable(5)).start();

        //new Thread(new BRunnable(1))  创建  新生态

        //.start()  准备状态  就绪状态

        // 拿到cpu时间片以后执行 run方法 时手动调用
        //      sleep()方法可以让线程进入 阻塞状态
        //      阻塞状态完成以后可以回到就绪状态
        //      如果调用wait()方法会让线程进入等待状态 不会自动解除
        //        直到有人调用notify() notifyAll();

        //如果cpu时间用尽了  yield()方法完成  保存 释放 cpu资源  回到就绪状态
        //      如果就绪状态再申请到时间片那么就回到运行状态

        //当用户线程执行完成以后，线程死亡了

//        //线程2 执行start()以后线程启动了
//        new Thread(new BRunnable(2)).start();
//        //线程3 执行start()以后线程启动了
//        new Thread(new BRunnable(3)).start();
    }
}
